package com.reliable.service.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * IP地理位置结构化缓存对象 reliable_ip_geo_cache
 *
 * @author ruoyi
 * @date 2025-11-10
 */
@Data
@ApiModel(value = "IP地理位置结构化缓存对象")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReliableIpGeoCache extends BaseEntitys {
    private static final long serialVersionUID = 1L;

    /**
     * IP地址（兼容IPv4/IPv6）
     */
    @ApiModelProperty(value = "IP地址（兼容IPv4/IPv6）", position = 0)
    @TableId(type = IdType.INPUT)
    private String ip;

    /**
     * 国家，如：中国
     */
    @ApiModelProperty(value = "国家，如：中国", position = 1)
    private String country;

    /**
     * 省份，如：广东省
     */
    @ApiModelProperty(value = "省份，如：广东省", position = 2)
    private String province;

    /**
     * 城市，如：深圳市
     */
    @ApiModelProperty(value = "城市，如：深圳市", position = 3)
    private String city;

    /**
     * 区/县，如：南山区（部分IP库支持）
     */
    @ApiModelProperty(value = "区/县，如：南山区（部分IP库支持）", position = 4)
    private String district;

    /**
     * 运营商，如：电信、联通、移动、阿里云
     */
    @ApiModelProperty(value = "运营商，如：电信、联通、移动、阿里云", position = 5)
    private String isp;

    /**
     * IP归属地组合（如：中国-广东省-深圳市-电信）
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "IP归属地组合（如：中国-广东省-深圳市-电信）", position = 6)
    private String fullLocation;

    /**
     * 纬度
     */
    @ApiModelProperty(value = "纬度", position = 7)
    private BigDecimal latitude;

    /**
     * 经度
     */
    @ApiModelProperty(value = "经度", position = 8)
    private BigDecimal longitude;

    /**
     * 定位精度半径（米）
     */
    @ApiModelProperty(value = "定位精度半径（米）", position = 9)
    private Integer accuracyRadius;

    /**
     * 时区，如：Asia/Shanghai
     */
    @ApiModelProperty(value = "时区，如：Asia/Shanghai", position = 10)
    private String timezone;

    /**
     * 邮政编码
     */
    @ApiModelProperty(value = "邮政编码", position = 11)
    private String postalCode;

    /**
     * 原始解析结果（保留完整数据用于调试或扩展）
     */
    @ApiModelProperty(value = "原始解析结果（保留完整数据用于调试或扩展）", position = 12)
    private String rawData;

    /**
     * 首次缓存时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @ApiModelProperty(value = "首次缓存时间", position = 13)
    private Date createdAt;

    /**
     * 最后更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
    @ApiModelProperty(value = "最后更新时间", position = 14)
    private Date updatedAt;

}